package com.lysb.core.utils;

import org.apache.commons.codec.binary.Hex;

import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 加密工具类
 * 
 * @author 胡小广
 */
public final class EncryptUtil {

  /**
   * SHA-256加密
   * 
   * @param source 待加密字符串
   * @return 加密后的字符串 （十六进制）
   * @throws NoSuchAlgorithmException
   * @throws UnsupportedEncodingException
   */
  public static String getSHA256Str(String source) throws NoSuchAlgorithmException {
    return encrypt("SHA-256", source);
  }

  /**
   * MD5加密
   * 
   * @param source 待加密字符串
   * @return 加密后的字符串（十六进制）
   * @throws NoSuchAlgorithmException
   * @throws UnsupportedEncodingException
   */
  public static String getMD5Str(String source) throws NoSuchAlgorithmException {
    return encrypt("MD5", source);
  }

  /**
   * 加密
   * 
   * @param type 加密方式
   * @param source 待加密字符串
   * @return
   * @throws NoSuchAlgorithmException
   * @throws UnsupportedEncodingException
   */
  private static String encrypt(String type, String source) throws NoSuchAlgorithmException {
    MessageDigest messageDigest;
    messageDigest = MessageDigest.getInstance(type);
    byte[] hash = messageDigest.digest(source.getBytes(StandardCharsets.UTF_8));
    return Hex.encodeHexString(hash);
  }
}
